#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

void print()
{
    cout << endl;
}

//n个参数：1 n -1 
//可以将模板参数中的所有参数打包成一个参数Args
//可以将函数参数中的所有参数打包成一个参数args
//
//...位于参数包的左边的时候，称为打包
//...位于参数包的右边的时候，称为解包
template <typename T, typename ...Args>//模板参数包
void print(T t, Args ...args)//函数参数包
{
    cout << t << "  ";
    //递归的过程
    print(args...);
}

void test()
{
    print();

    //T--->int  t = 1
    //cout << 1 <<  " ";
    //print();
    //   cout << endl;
    print(1);

    //T === int t = 1
    //cout << 1 << " "
    //print(1.1, true, "hello")
    //  T = double t = 1.1
    //  cout << 1.1 << "  ";
    //  print(true, "hello");
    //     T = bool t = 1
    //     cout << 1 << " ";
    //     print("hello");
    //         T = string t = "hello"
    //         cout << "hello" << " ";
    //         print();
    //           cout << endl;
    //
    print(1, 1.1, true, "hello");
}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

